package minstack;

//维护最小栈！！！
//pop、top 和 getMin 操作总是在 非空栈 上调用
import java.util.Stack;

class MinStack {
    private Stack<Integer> stack;
    private Stack<Integer> minStack;
    public MinStack() {
        stack = new Stack<>();
        minStack = new Stack<>();
    }
    
    public void push(int val) {
        stack.push(val);
        if (minStack.empty()) {
            minStack.push(val);
        } else {
            //Integer和int进行比较时，由于会自动拆箱，将Integer转为int，则直接看值的大小就可以 了。
            if (minStack.peek()>=val) {
                //这里的>=是一个细节问题：两个相同的最小也要放
                minStack.push(val);
            }
        }

    }
    
    public void pop() {
        if(!stack.empty()) {
            Integer val = stack.pop();
            //维护最小栈
            if (val.equals(minStack.peek())) {
                minStack.pop();
            }
        }
    }
    
    public int top() {
//        if (!stack.empty()) {
//            return stack.peek();
//        }
//        return -1;//迫不得已
        return stack.peek();//非空
    }
    
    public int getMin() {
        return minStack.peek();//非空
    }
}